﻿/***************************************************************
 * 开发人员：网魂小兵@http://www.mozlite.com
 * 
 * 目标标本：4.0.30319.239
 * 
 * 最后修改：2011/11/11 21:52:47
 * ************************************************************/
namespace Mozlite.FileStorages
{
    using System;
    using System.Linq;
    using System.Text;
    using System.Collections.Generic;
    using Mozlite.Data;
    using System.Data.Common;

    /// <summary>
    /// 文件数据存储。
    /// </summary>
    public abstract class FileStorageDataProvider : ProviderBase<FileStorageDataProvider>
    {
        /// <summary>
        /// 初始化类<see cref="T:Mozlite.FileStorages.FileStorageDataProvider"/>。
        /// </summary>
        protected FileStorageDataProvider(DbProviderFactory factory) : base(factory) { }

        /// <summary>
        /// 保存文件夹。
        /// </summary>
        /// <param name="folder">文件夹实例对象。</param>
        /// <returns>返回文件夹状态。</returns>
        public abstract FileStorageStatus CreateFolder(UserFolder folder);

        /// <summary>
        /// 改变文件夹名称。
        /// </summary>
        /// <param name="folderID">文件夹ID。</param>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <param name="folderName">文件夹名称。</param>
        /// <returns>返回文件存储状态。</returns>
        public abstract FileStorageStatus ChangeFolderName(int folderID/*, int settingsID*/, int userID, string folderName);

        /// <summary>
        /// 获取用户所有文件夹列表，文件夹ID。
        /// </summary>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <returns>返回文件夹列表。</returns>
        public abstract Dictionary<int, UserFolder> GetFolders(/*int settingsID,*/ int userID);

        /// <summary>
        /// 保存用户文件。
        /// </summary>
        /// <param name="file">用户文件实例。</param>
        /// <returns>返回文件存储状态。</returns>
        public abstract FileStorageStatus SaveFile(UserFile file);

        /// <summary>
        /// 获取玩家所有文件列表，键值为文件夹ID。
        /// </summary>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <returns>返回文件列表。</returns>
        public abstract Dictionary<int, List<UserFile>> LoadFiles(/*int settingsID,*/ int userID);

        /// <summary>
        /// 移动文件夹。
        /// </summary>
        /// <param name="srcID">原文件夹。</param>
        /// <param name="desID">目标文件夹。</param>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <returns>返回文件存储状态。</returns>
        public abstract FileStorageStatus MoveFolder(int srcID, int desID/*, int settingsID*/, int userID);

        /// <summary>
        /// 获取磁盘使用量。
        /// </summary>
        ///// <param name="settingsID">当前网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <returns>返回磁盘使用量。</returns>
        public abstract long GetDiskUsage(/*int settingsID,*/ int userID);

        /// <summary>
        /// 获取文件实例。
        /// </summary>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <param name="fileID">文件ID。</param>
        /// <returns>返回用户文件。</returns>
        public abstract UserFile GetFile(/*int settingsID,*/ int userID, int fileID);
        
        /// <summary>
        /// 获取文件实例。
        /// </summary>
        /// <param name="fileID">文件ID。</param>
        /// <returns>返回用户文件实例。</returns>
        public abstract UserFile GetStorage(int fileID);

        /// <summary>
        /// 移动文件。
        /// </summary>
        /// <param name="fileID">文件ID。</param>
        /// <param name="folderID">文件夹ID。</param>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <returns>返回文件存储状态。</returns>
        public abstract FileStorageStatus MoveFile(int fileID, int folderID/*, int settingsID*/, int userID);

        /// <summary>
        /// 计算文件夹大小。
        /// </summary>
        public abstract void CalculateFolderSize();

        /// <summary>
        /// 删除文件夹。
        /// </summary>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <param name="folderID">文件夹ID。</param>
        /// <returns>返回执行结果。</returns>
        public abstract bool DeleteFolder(/*int settingsID,*/ int userID, int folderID);

        /// <summary>
        /// 删除文件。
        /// </summary>
        ///// <param name="settingsID">网站设置ID。</param>
        /// <param name="userID">用户ID。</param>
        /// <param name="fileID">文件ID。</param>
        /// <returns>返回执行结果。</returns>
        public abstract bool DeleteFile(/*int settingsID,*/ int userID, int fileID);
    }
}